//package com.ruoyi.web.controller.payment;
//
//import com.alibaba.fastjson.JSONObject;
//import com.ruoyi.common.config.WxPayAppConfig;
//import com.ruoyi.common.utils.RedisUtils;
//import com.ruoyi.common.utils.uuid.UUID;
//import org.apache.http.client.methods.HttpGet;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.*;
//
//import javax.annotation.Resource;
//import java.io.UnsupportedEncodingException;
//import java.net.URLDecoder;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.Formatter;
//import java.util.HashMap;
//import java.util.Map;
//
//@RestController
//@RequestMapping("/api/weiXin")
//@CrossOrigin
//public class WeiXinController {
//
//    private static final Logger logger = LoggerFactory.getLogger(WeiXinController.class);
//
//    @Resource
//    private RedisUtils redisUtil;
//    @Autowired
//    private WxPayAppConfig wxPayAppConfig;
//
//
//
//
//
//    // 获取微信的openid
//    @PostMapping("/wxOpeid")
//    public Map WxOpenid(@RequestBody String code) throws Exception {
//        Map params = new HashMap();
//        Map map = new HashMap<>();
//        // 微信公众号平台的 开发者密码
//        params.put("secret", Parm.APPSECRET);
//        //  微信公众号平台的 开发者id
//        params.put("appid", Parm.APPID);
//        // 获取access_token填写client_credential
//        params.put("grant_type", "client_credential");
//        // code作为换取access_token的票据，每次用户授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期
//        params.put("code", code.subSequence(0, code.length() - 1));
//        System.out.println(params);
//        // 获取用户的openid
//        String result = HttpGet.httpRequestToString(
//                "https://api.weixin.qq.com/sns/oauth2/access_token", params);
//        System.out.println("result>>>>>" + result);
//        JSONObject jsonObject = JSONObject.parseObject(result);
//        if (jsonObject.get("openid").toString() != null) {
//            // 加密openid 加密方式随意的，加密是因为分享链接中的openid会传播出去 所以需要加密一下
//            String openid = ASEUtil.AESencrypt(jsonObject.get("openid").toString());
//            logger.info("openid>>>>>:"+openid);
//            map.put("openid", openid);
//            map.put("status", 200);
//        } else {
//            map.put("openid", null);
//            map.put("status", 500);
//        }
//        return map;
//    }
//
//    /**
//     * 第一步：用户同意授权，获取code(引导关注者打开如下页面：)
//     * 获取 code、state
//     */
//    @PostMapping("/code")
//    public static String getStartURLToGetCode() {
//        Map<String, String> params = new HashMap<String, String>();
//        params.put("redirect_uri", Parm.REDIRECT_URI);
//        params.put("appid", Parm.APPID);
//        params.put("response_type", "code");
//        // 应用授权作用域，snsapi_base （不弹出授权页面，直接跳转，只能获取用户openid），snsapi_userinfo （弹出授权页面，可通过openid拿到昵称、性别、所在地。并且， 即使在未关注的情况下，只要用户授权，也能获取其信息 ）
//        params.put("scope", "snsapi_base ");
//        // 重定向后会带上state参数，开发者可以填写a-zA-Z0-9的参数值，最多128字节
//        params.put("state", "STATE#wechat_redirect");
//        //  调起授权页面
//        String result = HttpGet.httpRequestToString("https://open.weixin.qq.com/connect/oauth2/authorize", params);
//        System.out.println(result);
//        return result;
//    }
//
//    // 获取微信token
//    @PostMapping("/access_token")
//    public String access_Token() {
//        Map<String, String> params = new HashMap<String, String>();
//        // 判断是否在redis缓存中 存在  false 不存在 true 存在
//        boolean access_Token = redisUtil.hashKey("access_Token");
//        System.out.println(access_Token);
//        if (access_Token == false) {
//            // 开发者密码
//            params.put("secret", Parm.APPSECRET);
//            // 开发者id
//            params.put("appid", Parm.APPID);
//            // 应用授权作用域，snsapi_base （不弹出授权页面，直接跳转，只能获取用户openid），snsapi_userinfo （弹出授权页面，可通过openid拿到昵称、性别、所在地。并且， 即使在未关注的情况下，只要用户授权，也能获取其信息 ）
//            params.put("grant_type", "client_credential");
//            // 获取token 两个小时过期
//            String result = HttpGet.httpRequestToString("https://api.weixin.qq.com/cgi-bin/token", params);
//            System.out.println("result>>>>>>:" + result);
//            JSONObject jsonObject = JSONObject.parseObject(result);
//            System.out.println("jsonObject:>>>>" + jsonObject);
//            String token = jsonObject.get("access_token").toString();
//            System.out.println("token:>>>>" + token);
//            // 放入数据时设置redis缓存过期时间  一个半小时
//            redisUtil.set("access_Token", token, 5400);
//            return token;
//        } else {
//            return redisUtil.get("access_Token").toString();
//        }
//    }
//
//    // 获取微信ticket
//    @PostMapping("/get_ticket")
//    public String getTicket() {
//        // 判断是否在redis缓存中 存在  false 不存在 true 存在
//        boolean access_Token = redisUtil.hashKey("get_ticket");
//        if (access_Token == false) {
//            // 获取token
//            String token = access_Token();
//            Map<String, String> params = new HashMap<String, String>();
//            // 调用类型
//            params.put("type", "jsapi");
//            params.put("access_token", token);
//            params.put("grant_type", "client_credential");
//            String result = HttpGet.httpRequestToString("https://api.weixin.qq.com/cgi-bin/ticket/getticket", params);
//            JSONObject jsonTicket = JSONObject.parseObject(result);
//            // 放入数据时设置redis缓存过期时间  一个半小时
//            redisUtil.set("get_ticket", jsonTicket.get("ticket").toString(), 5400);
//            return jsonTicket.get("ticket").toString();
//        } else {
//            // 获取redis缓存的数据
//            return redisUtil.get("get_ticket").toString();
//        }
//
//    }
//
//    // 微信签名算法
//    @RequestMapping(value = "/get_signature")
//    public Object getSignature(@RequestBody String url) throws UnsupportedEncodingException {
//        // 前端的页面地址
//        url = URLDecoder.decode(url.subSequence(0, url.length() - 1).toString(), "UTF-8");
//        System.out.println("不存在");
//        Map<String, String> ret = new HashMap<String, String>();
//        System.out.println("url>>>>>:" + url);
//        String wxTicket = getTicket();
//        // 获取随机数 我用的是 UUID
//        String nonce_str = create_nonce_str();
//        // 时间戳 要秒为单位的
//        String timestamp = create_timestamp();
//        String str;
//        String signature = "";
//        //注意这里参数名必须全部小写，且必须有序
//        str = "jsapi_ticket=" + wxTicket +
//                "&noncestr=" + nonce_str +
//                "&timestamp=" + timestamp +
//                "&url=" + url;
//
//        try {
//            // 微信签名 就是将上面的参数str加密
//            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
//            crypt.reset();
//            crypt.update(str.getBytes("UTF-8"));
//            // 微信分享需要的签名
//            signature = byteToHex(crypt.digest());
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//
//        ret.put("url", url);
//        ret.put("jsapi_ticket", wxTicket);
//        ret.put("nonceStr", nonce_str);
//        ret.put("timestamp", timestamp);
//        ret.put("signature", signature);
//        ret.put("appId", Parm.APPID);
//        return ret;
//    }
//
//    private static String byteToHex(final byte[] hash) {
//        Formatter formatter = new Formatter();
//        for (byte b : hash) {
//            formatter.format("%02x", b);
//        }
//        String result = formatter.toString();
//        formatter.close();
//        return result;
//    }
//
//    private static String create_nonce_str() {
//        return UUID.randomUUID().toString();
//    }
//
//    private static String create_timestamp() {
//        return Long.toString(System.currentTimeMillis() / 1000);
//    }
//
//    // 获取用户信息
//    @PostMapping("/userinfo")
//    public JSONObject user_info(@RequestParam String openid) throws Exception {
//        Map<String, String> params = new HashMap<String, String>();
//        String token = access_Token();
//        params.put("access_token", token);
//        params.put("openid", openid);
//        params.put("lang", "zh_CN");
//        String result = HttpGet.httpRequestToString("https://api.weixin.qq.com/cgi-bin/user/info", params);
//        System.out.println("result>>>>:" + result);
//        JSONObject jsonObject = JSONObject.parseObject(result);
//        return jsonObject;
//    }
//
//    // 批量获取用户信息
//    @PostMapping("/userInfos")
//    public JSONObject user_infos(@RequestParam String token) {
//        Map<String, String> params = new HashMap<String, String>();
//        params.put("access_token", token);
//        String result = HttpGet.httpRequestToString("https://api.weixin.qq.com/cgi-bin/user/info/batchget", params);
//        System.out.println("result>>>>:" + result);
//        JSONObject jsonObject = JSONObject.parseObject(result);
//        return jsonObject;
//    }
//
//
//
//
//}
